package pe.gob.osce.sirenas.svc;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.ResourceBundle;

import javax.ejb.EJB;
import javax.ejb.EJBException;
import javax.ejb.Stateless;

import org.apache.log4j.Logger;

import pe.gob.osce.sirenas.dao.AcreditacionDAOLocal;
import pe.gob.osce.sirenas.dao.AreaProfesionDAOLocal;
import pe.gob.osce.sirenas.dao.CapacitacionDAOLocal;
import pe.gob.osce.sirenas.dao.CentroEstudiosDAOLocal;
import pe.gob.osce.sirenas.dao.ComunicacionesDAOLocal;
import pe.gob.osce.sirenas.dao.DocenciaDAOLocal;
import pe.gob.osce.sirenas.dao.EspecialidadAcademicaDAOLocal;
import pe.gob.osce.sirenas.dao.ExperienciaLaboralDAOLocal;
import pe.gob.osce.sirenas.dao.FichaArbitralDAOLocal;
import pe.gob.osce.sirenas.dao.FiscalizacionDAOLocal;
import pe.gob.osce.sirenas.dao.FormacionAcademicaDAOLocal;
import pe.gob.osce.sirenas.dao.HistorialEstadoDAOLocal;
import pe.gob.osce.sirenas.dao.MateriaControversiaDAOLocal;
import pe.gob.osce.sirenas.dao.PaisDAOLocal;
import pe.gob.osce.sirenas.dao.ParametrosDAOLocal;
import pe.gob.osce.sirenas.dao.TrayectoriaArbitralDAOLocal;
import pe.gob.osce.sirenas.dao.convert.AcreditacionConvert;
import pe.gob.osce.sirenas.dao.convert.AuditoriaConvert;
import pe.gob.osce.sirenas.dao.convert.CapacitacionConvert;
import pe.gob.osce.sirenas.dao.convert.DocenciaConvert;
import pe.gob.osce.sirenas.dao.convert.EspecialidadAcademicaConvert;
import pe.gob.osce.sirenas.dao.convert.ExperienciaLaboralConvert;
import pe.gob.osce.sirenas.dao.convert.FichaArbitralConvert;
import pe.gob.osce.sirenas.dao.convert.FormacionAcademicaConvert;
import pe.gob.osce.sirenas.dao.convert.TrayectoriaArbitralConvert;
import pe.gob.osce.sirenas.model.AcreditacionDTO;
import pe.gob.osce.sirenas.model.AreaProfesionDTO;
import pe.gob.osce.sirenas.model.AuditoriaDTO;
import pe.gob.osce.sirenas.model.CapacitacionDTO;
import pe.gob.osce.sirenas.model.CentroEstudiosDTO;
import pe.gob.osce.sirenas.model.DocenciaDTO;
import pe.gob.osce.sirenas.model.EspecialidadAcademicaDTO;
import pe.gob.osce.sirenas.model.ExperienciaLaboralDTO;
import pe.gob.osce.sirenas.model.FichaArbitralDTO;
import pe.gob.osce.sirenas.model.FormacionAcademicaDTO;
import pe.gob.osce.sirenas.model.MateriaControversiaDTO;
import pe.gob.osce.sirenas.model.NotificacionesDTO;
import pe.gob.osce.sirenas.model.PaisDTO;
import pe.gob.osce.sirenas.model.ParametrosDTO;
import pe.gob.osce.sirenas.model.TrayectoriaArbitralDTO;
import pe.gob.osce.sirenas.model.jpa.Acreditacion;
import pe.gob.osce.sirenas.model.jpa.Auditoria;
import pe.gob.osce.sirenas.model.jpa.Capacitacion;
import pe.gob.osce.sirenas.model.jpa.Comunicaciones;
import pe.gob.osce.sirenas.model.jpa.Docencia;
import pe.gob.osce.sirenas.model.jpa.EspecialidadAcademica;
import pe.gob.osce.sirenas.model.jpa.ExperienciaLaboral;
import pe.gob.osce.sirenas.model.jpa.FichaArbitral;
import pe.gob.osce.sirenas.model.jpa.FormacionAcademica;
import pe.gob.osce.sirenas.model.jpa.HistorialEstado;
import pe.gob.osce.sirenas.model.jpa.TrayectoriaArbitral;
import pe.gob.osce.sirenas.model.jpa.rectificaciones.HistorialCapacitacion;
import pe.gob.osce.sirenas.model.jpa.rectificaciones.HistorialDocencia;
import pe.gob.osce.sirenas.model.jpa.rectificaciones.HistorialEspecialidadAcademica;
import pe.gob.osce.sirenas.model.jpa.rectificaciones.HistorialExperienciaLaboral;
import pe.gob.osce.sirenas.model.jpa.rectificaciones.HistorialFormacionAcademica;
import pe.gob.osce.sirenas.model.jpa.rectificaciones.HistorialTrayectoriaArbitral;
import pe.gob.osce.sirenas.util.ConstanteEJB;
import pe.gob.osce.sirenas.util.ModeloException;


/**
 * Session Bean implementation class RegistrarFichaArbitroService
 */
@Stateless(mappedName = "RegistrarFichaArbitroService")
public class RegistrarFichaArbitroServiceImpl implements RegistrarFichaArbitroServiceLocal {
	final static Logger log = Logger.getLogger(RegistrarFichaArbitroServiceImpl.class);

	private ResourceBundle propSirenas = ResourceBundle.getBundle(ConstanteEJB.PROPERTIES);
	@EJB
	private	FormacionAcademicaDAOLocal	formacionAcademicaDAOLocal;

	@EJB
	private	ExperienciaLaboralDAOLocal	expLaboralDAOLocal;
	
	@EJB
	private	TrayectoriaArbitralDAOLocal	trayArbitralDAOLocal;
	
	@EJB
	private	DocenciaDAOLocal	docenciaDAOLocal;
	@EJB
	private	FichaArbitralDAOLocal	fichaArbitralDAOLocal;

	@EJB
	private	ParametrosDAOLocal	parametrosDAOLocal;
	
	@EJB
	private	AreaProfesionDAOLocal	areaProfesionDAOLocal;
	
	@EJB
	private	PaisDAOLocal	paisDAOLocal;
	
	@EJB
	private	CentroEstudiosDAOLocal	centroEstudiosDAOLocal;
	
	@EJB
	private	MateriaControversiaDAOLocal	materiaControversiaDAOLocal;
	
	@EJB
	private	EspecialidadAcademicaDAOLocal	especialidadAcademicaDAOLocal;
	
	@EJB
	private	CapacitacionDAOLocal	capacitacionDAOLocal;

	@EJB
	private	AcreditacionDAOLocal	acreditacionDAOLocal;
	@EJB
	private HistorialEstadoDAOLocal historialEstadoDAOLocal;
	@EJB
	private RegistrarNotificacionServiceLocal registrarNotificacionService;
	
	@EJB
	private ComunicacionesDAOLocal comunicacionesDAOLocal;
	@EJB
	private FiscalizacionDAOLocal fiscalizacionDAOLocal;
	
	@Override
	public FichaArbitralDTO generarFichaArbitral(FichaArbitralDTO fichaArbitralDTO,AuditoriaDTO auditoriaDTO) throws Exception {
		try {

			FichaArbitral fichaArbitralJPA=null;
			fichaArbitralJPA=FichaArbitralConvert.createJPA(fichaArbitralDTO, auditoriaDTO);			
			fichaArbitralJPA=fichaArbitralDAOLocal.insertarFicha(fichaArbitralJPA);
			
			/**Inactivo todos los historiales anteriores*/
			historialEstadoDAOLocal.inacticaHistorialEstado(fichaArbitralDTO.getIdFicha(), auditoriaDTO.getUsuarioRegistro());
			
			/**Registro el Estado Inicial de mi Ficha*/
			HistorialEstado historialEstado=new HistorialEstado();
			historialEstado.setIdFicha(fichaArbitralJPA.getIdFicha());
			historialEstado.setFecInicio(new Date());
			historialEstado.setIdEstado(fichaArbitralJPA.getIdEstadoFicha());
			historialEstado.setIndVigente(true);
			historialEstado.setEstado(fichaArbitralJPA.getEstado());
			historialEstado.setAuditoria(AuditoriaConvert.createJPA(auditoriaDTO));
			historialEstadoDAOLocal.insertHistorialEstado(historialEstado);
			
			/**Registro de la Notificacion a bandeja*/
			NotificacionesDTO notificacionesDTO=new NotificacionesDTO();
			notificacionesDTO.setIdFicha(fichaArbitralDTO.getIdFicha());
			notificacionesDTO.setDescAsunto(propSirenas.getString(ConstanteEJB.NOTIF_INSCRIPCION));
			notificacionesDTO.setDescDetalle(propSirenas.getString(ConstanteEJB.NOTIF_DETALLE_INSCRIPCION));
			notificacionesDTO.setIndLectura(false);
			registrarNotificacionService.registrarNotificacion(notificacionesDTO, auditoriaDTO);
			/**Implemetar metodo para sacar los correos de Comunicacione sd ela fichaArbitralDTO*/
			String toEmail="jcayulla@outlook.com siskayulla@gmail.com";
			/**Registro de la Notificacion a Correo Electronico*/
			registrarNotificacionService.enviarCorreoNotificacion(toEmail, propSirenas.getString(ConstanteEJB.NOTIF_INSCRIPCION), propSirenas.getString(ConstanteEJB.NOTIF_DETALLE_GRAL));

		} catch (ModeloException e) {
			throw new Exception(e.getMessage(),e);
		} catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB),e);
		}
		return fichaArbitralDTO;
	}
	
	
	
	

	@Override
	public	FichaArbitralDTO obtenerFichaArbitral(FichaArbitralDTO fichaArbitralDTO)
			throws Exception {
		try{
			fichaArbitralDTO=fichaArbitralDAOLocal.obtenerFichaArbitral(fichaArbitralDTO.getIdFicha(),fichaArbitralDTO.getPersona().getNumRuc(),fichaArbitralDTO.getTipoFicha());
			Long idFiscalizacion=fiscalizacionDAOLocal.tieneFiscalizacionEnProceso(fichaArbitralDTO.getIdFicha());
			if(idFiscalizacion!=null){
				fichaArbitralDTO.setEnFiscalizacion(true);
				fichaArbitralDTO.setIdFiscalizacion( idFiscalizacion);
			}

		} catch (ModeloException e) {
			throw new Exception(e.getMessage(),e);
		} catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB),e);
		}
		return fichaArbitralDTO;
	}
///***********************************
	@Override
	public	Map<String,List<FormacionAcademicaDTO>> obtenerMapaFichaFormacionAcademica(Long idFicha)
			throws Exception {
		List<FormacionAcademicaDTO>	listFormacionAcademica=null;
		List<FormacionAcademicaDTO>	listOriginal=new ArrayList<FormacionAcademicaDTO>();
		List<FormacionAcademicaDTO>	listActualizada=new ArrayList<FormacionAcademicaDTO>();
		Map<String,List<FormacionAcademicaDTO>> mapaFormacionAcademica = new HashMap<String,List<FormacionAcademicaDTO>>();
		
		try{			
			listFormacionAcademica=formacionAcademicaDAOLocal.obtenerListaFormacionAcademica(idFicha);			
			
			for (FormacionAcademicaDTO formacionAcademicaDTO : listFormacionAcademica) {
				if(formacionAcademicaDTO.getCodRegistro().equals("ORIGINAL")){
					listOriginal.add(formacionAcademicaDTO);
				}
				if(formacionAcademicaDTO.getCodRegistro().equals("ACTUALIZACION")){
					listActualizada.add(formacionAcademicaDTO);
				}
			}
			mapaFormacionAcademica.put("ORIGINAL", listOriginal);
			mapaFormacionAcademica.put("ACTUALIZACION", listActualizada);

		} catch (ModeloException e) {
			throw new Exception(e.getMessage(),e);
		} catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB),e);
		}
		return mapaFormacionAcademica;
	}
///***********************************
	
	@Override
	public	List<FormacionAcademicaDTO> obtenerFichaFormacionAcademica(Long idFicha)
			throws Exception {
		List<FormacionAcademicaDTO>	listFormacionAcademica=null;
		
		try{			
			listFormacionAcademica=formacionAcademicaDAOLocal.obtenerListaFormacionAcademica(idFicha);			

		} catch (ModeloException e) {
			throw new Exception(e.getMessage(),e);
		} catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB),e);
		}
		return listFormacionAcademica;
	}
	
	@Override
	public	List<EspecialidadAcademicaDTO> obtenerFichaExpecialidadAcademica(Long idFicha)
			throws Exception {
		List<EspecialidadAcademicaDTO>	listEspecialidadAcademica=null;
		
		try{
			
			listEspecialidadAcademica=especialidadAcademicaDAOLocal.obtenerListaExpecialidadAcademica(idFicha);			

		} catch (ModeloException e) {
			throw new Exception(e.getMessage(),e);
		} catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB),e);
		}
		return listEspecialidadAcademica;
	}
	
	@Override
	public	List<DocenciaDTO> obtenerFichaDocencia(Long idFicha)
			throws Exception {
		List<DocenciaDTO>	listDocencia=null;
		
		try{
			
			listDocencia=docenciaDAOLocal.obtenerListaDocencia(idFicha);			

		} catch (ModeloException e) {
			throw new Exception(e.getMessage(),e);
		} catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB),e);
		}
		return listDocencia;
	}
	
	@Override
	public	List<CapacitacionDTO> obtenerFichaCapacitacion(Long idFicha)
			throws Exception {
		List<CapacitacionDTO>	listCapacitacion=null;
		
		try{
			
			listCapacitacion=capacitacionDAOLocal.obtenerListaCapacitacion(idFicha);			

		} catch (ModeloException e) {
			throw new Exception(e.getMessage(),e);
		} catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB),e);
		}
		return listCapacitacion;
	}
	
	@Override
	public	List<TrayectoriaArbitralDTO> obtenerFichaTrayectoria(Long idFicha, String tipArbitraje)
			throws Exception {
		List<TrayectoriaArbitralDTO>	listTrayectoria=null;
		
		try{
			
			listTrayectoria=trayArbitralDAOLocal.obtenerListaTrayectoria(idFicha,tipArbitraje);			

		} catch (ModeloException e) {
			throw new Exception(e.getMessage(),e);
		} catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB),e);
		}
		return listTrayectoria;
	}
	
	@Override
	public	List<ExperienciaLaboralDTO> obtenerFichaExpLaboral(Long idFicha)
			throws Exception {
		List<ExperienciaLaboralDTO>	listExpLaboral=null;
		
		try{
			
			listExpLaboral=expLaboralDAOLocal.obtenerListaExpLaboral(idFicha);			

		} catch (ModeloException e) {
			throw new Exception(e.getMessage(),e);
		} catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB),e);
		}
		return listExpLaboral;
	}
	
	@Override
	public	List<FormacionAcademicaDTO> guardarListaFormacionAcademica(List<FormacionAcademicaDTO> listFormacionAcademicaDTO,AuditoriaDTO auditoriaDTO, Long idPersona)
			throws Exception {
		List<FormacionAcademica>	listFormacionAcademicaJPA=null;
		List<FormacionAcademica>	listFormacionAcademicaHistorialJPA=null;
		List<HistorialFormacionAcademica>	listHistorialFormacionAcademicaJPA=null;
		Auditoria auditoriaJPA=null;
		
		FormacionAcademica historialFormacionAcademicaJPA=null;
						
		Boolean listHistorial= new Boolean(false);
		
		try{
			auditoriaJPA=AuditoriaConvert.createJPA(auditoriaDTO);
			/** Insertar Solicitud **/
			/** Consultando e insertando en la tabla Historial cuando es modificado y  el estado de la Ficha sea diferente de Estado Pendiente ***/
			listFormacionAcademicaHistorialJPA= new ArrayList<FormacionAcademica>();
			
			for (FormacionAcademicaDTO formacionAcademicaDTO : listFormacionAcademicaDTO) {
			
				if(formacionAcademicaDTO.getIdEstadoFicha()!=Long.parseLong(propSirenas.getString(ConstanteEJB.ID_ESTADO_PENDIENTE))){
					
					if(formacionAcademicaDTO.getIdModificado()!=Long.parseLong(propSirenas.getString(ConstanteEJB.VALORCERO))){
						historialFormacionAcademicaJPA= new FormacionAcademica();
						historialFormacionAcademicaJPA=formacionAcademicaDAOLocal.obtenerFormacionAcademica(formacionAcademicaDTO.getIdModificado());
						
						listFormacionAcademicaHistorialJPA.add(historialFormacionAcademicaJPA);
					}
				}	
			}
			if(listFormacionAcademicaHistorialJPA!=null){
				listHistorialFormacionAcademicaJPA=FormacionAcademicaConvert.createListHistorialFormAcademicaJPA(listFormacionAcademicaHistorialJPA, auditoriaJPA);
				for (HistorialFormacionAcademica historialFormAcademicaJPA : listHistorialFormacionAcademicaJPA) {
					listHistorial= formacionAcademicaDAOLocal.insertarHistorialFormacionGeneral(historialFormAcademicaJPA);

					/**Registro de la Notificacion a bandeja*/
					NotificacionesDTO notificacionesDTO=new NotificacionesDTO();
					notificacionesDTO.setIdFicha(historialFormAcademicaJPA.getIdFicha());
					notificacionesDTO.setDescAsunto(propSirenas.getString(ConstanteEJB.NOTIF_RECTIFICACION));
					notificacionesDTO.setDescDetalle(propSirenas.getString(ConstanteEJB.NOTIF_DETALLE_RECTIFICACION)+" "+historialFormAcademicaJPA.NOMBRE_TABLA);
					notificacionesDTO.setIndLectura(false);
					
					registrarNotificacionService.registrarNotificacion(notificacionesDTO, auditoriaDTO);
					/**Implemetar metodo para sacar los correos de Comunicacione sd ela fichaArbitralDTO*/
					List<Comunicaciones> correos= comunicacionesDAOLocal.consultarListaComunicacion(idPersona, Long.parseLong(propSirenas.getString(ConstanteEJB.ID_CORREOELECTRONICO)), Long.parseLong(propSirenas.getString(ConstanteEJB.ID_CORREOELECTRONICODOS)));
					String toEmail="";
					if(correos!=null)
					{
						for (Comunicaciones comunicaciones : correos) {
							toEmail+=comunicaciones.getDescripcionDetalle()+ "  ";
						}
					}
					//String toEmail="jcayulla@outlook.com";
					/**Registro de la Notificacion a Correo Electronico*/
					registrarNotificacionService.enviarCorreoNotificacion(toEmail, propSirenas.getString(ConstanteEJB.NOTIF_RECTIFICACION), propSirenas.getString(ConstanteEJB.NOTIF_DETALLE_GRAL));					
				}
			}
			/*** FIN de Metodos de Historial**/
			
			
			listFormacionAcademicaJPA=FormacionAcademicaConvert.createListFormAcademicaJPA(listFormacionAcademicaDTO, auditoriaJPA);
			for (FormacionAcademica formacionAcademica : listFormacionAcademicaJPA) {
				formacionAcademica= formacionAcademicaDAOLocal.insertar(formacionAcademica);
			}
			listFormacionAcademicaDTO=FormacionAcademicaConvert.createListFormAcademicaDTO(listFormacionAcademicaJPA);


		} catch (ModeloException e) {
			throw new Exception(e.getMessage(),e);
		} catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB),e);
		}
		return listFormacionAcademicaDTO;
	}
	
	/**
     * Método que recibe una lista desde el Bean para enviar a DAOLocal E insertar a la BD
     * @return especialidadAcademicaDTO Lista de Especialidades, tipo ArrayList<especialidadAcademicaDTO>.  
     * @throws EJBException genera una excepción en caso de error.
     */
	@Override
	public	List<EspecialidadAcademicaDTO> guardarListaEspecialidadAcademica(List<EspecialidadAcademicaDTO> especialidadAcademicaDTO,AuditoriaDTO auditoriaDTO,Long idPersona)
			throws Exception {
		List<EspecialidadAcademica> especialidadAcademicaJPA=null;
		List<EspecialidadAcademica> listhistorialEspAcademicJPA=null;
		EspecialidadAcademica historialEspAcademicJPA=null;
		Boolean historialAcedemic= false;
		
		List<HistorialEspecialidadAcademica> listaHistorialEspecAcademicJPA=null;
		Auditoria auditoriaJPA=null;
		try {
			auditoriaJPA=AuditoriaConvert.createJPA(auditoriaDTO);
			listhistorialEspAcademicJPA= new ArrayList<EspecialidadAcademica>();
			
			/*** Obteniendo la lista de los  registro de Especialidades rectificadas**/
			/** Consultando e insertando en la tabla Historial cuando es modificado y  el estado de la Ficha sea diferente de Estado Pendiente ***/
			for (EspecialidadAcademicaDTO especialAcademic : especialidadAcademicaDTO) {
				historialEspAcademicJPA= new EspecialidadAcademica();
				if(especialAcademic.getIdEstadoFicha()!=Long.parseLong(propSirenas.getString(ConstanteEJB.ID_ESTADO_PENDIENTE)))
				{
					if(especialAcademic.getIdModificado()!=Long.parseLong(propSirenas.getString(ConstanteEJB.VALORCERO)))
					{
						historialEspAcademicJPA=especialidadAcademicaDAOLocal.consultarEspecialidadAcademica(especialAcademic.getIdModificado());
						listhistorialEspAcademicJPA.add(historialEspAcademicJPA);
					}	
				}
			}
			
			listaHistorialEspecAcademicJPA=EspecialidadAcademicaConvert.createListHistorialEspecialidadAcademicaJPA(listhistorialEspAcademicJPA, auditoriaJPA);
			
			if(listaHistorialEspecAcademicJPA!=null)
			{
				for (HistorialEspecialidadAcademica historialEspecialidadAcademica : listaHistorialEspecAcademicJPA) {
					historialAcedemic= new Boolean(false);
					historialAcedemic=especialidadAcademicaDAOLocal.insertarHistorialEspecialidadAcademica(historialEspecialidadAcademica);
					
					/**Registro de la Notificacion a bandeja*/
					NotificacionesDTO notificacionesDTO=new NotificacionesDTO();
					notificacionesDTO.setIdFicha(historialEspecialidadAcademica.getIdFicha());
					notificacionesDTO.setDescAsunto(propSirenas.getString(ConstanteEJB.NOTIF_RECTIFICACION));
					notificacionesDTO.setDescDetalle(propSirenas.getString(ConstanteEJB.NOTIF_DETALLE_RECTIFICACION)+" "+historialEspecialidadAcademica.NOMBRE_TABLA);
					notificacionesDTO.setIndLectura(false);
					
					registrarNotificacionService.registrarNotificacion(notificacionesDTO, auditoriaDTO);
					/**Implemetar metodo para sacar los correos de Comunicacione sd ela fichaArbitralDTO*/
					List<Comunicaciones> correos= comunicacionesDAOLocal.consultarListaComunicacion(idPersona, Long.parseLong(propSirenas.getString(ConstanteEJB.ID_CORREOELECTRONICO)), Long.parseLong(propSirenas.getString(ConstanteEJB.ID_CORREOELECTRONICODOS)));
					String toEmail="";
					if(correos!=null)
					{
						for (Comunicaciones comunicaciones : correos) {
							toEmail+=comunicaciones.getDescripcionDetalle()+ "  ";
						}
					
					}
					//String toEmail="jcayulla@outlook.com";
					/**Registro de la Notificacion a Correo Electronico*/
					registrarNotificacionService.enviarCorreoNotificacion(toEmail, propSirenas.getString(ConstanteEJB.NOTIF_RECTIFICACION), propSirenas.getString(ConstanteEJB.NOTIF_DETALLE_GRAL));
				}
			}
			/***  FIN***/
			
			especialidadAcademicaJPA=EspecialidadAcademicaConvert.createListEspecialidadAcademicaJPA(especialidadAcademicaDTO, auditoriaJPA);
			
			for (EspecialidadAcademica especialidadAcademica : especialidadAcademicaJPA) {
				especialidadAcademica=especialidadAcademicaDAOLocal.insertar(especialidadAcademica);				
			}
			especialidadAcademicaDTO=EspecialidadAcademicaConvert.createListEspecialidadAcademicaDTO(especialidadAcademicaJPA);

		} catch (ModeloException e) {
			throw new Exception(e.getMessage(),e);
		} catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB),e);
		}
		return especialidadAcademicaDTO;
	}
	
	/**
     * Método que recibe una lista desde el Bean para enviar a DAOLocal E insertar a la BD
     * @return especialidadAcademicaDTO Lista de Especialidades, tipo ArrayList<especialidadAcademicaDTO>.  
     * @throws EJBException genera una excepción en caso de error.
     */
	@Override
	public	List<CapacitacionDTO> guardarListaCapacitacion(List<CapacitacionDTO> listCapacitacionDTO,AuditoriaDTO auditoriaDTO,Long idPersona)
			throws Exception {
		List<Capacitacion> listCapacitacionJPA=null;
		List<Capacitacion> listCapacitacionHistorialJPA=null;
		Capacitacion historialCapacitacion=null;
		Boolean capacitacionBoolean=null;
		
		List<HistorialCapacitacion> listHistorialCapacitacionJPA= null;
		Auditoria auditoriaJPA=null;
		try {
			listCapacitacionHistorialJPA= new ArrayList<Capacitacion>();
			auditoriaJPA=AuditoriaConvert.createJPA(auditoriaDTO);
			/*** Obteniendo la lista de los  registro de Capacitaciones rectificadas**/
			/** Consultando e insertando en la tabla Historial cuando es modificado y  el estado de la Ficha sea diferente de Estado Pendiente ***/
			listCapacitacionJPA=CapacitacionConvert.createListCapacitacionJPA(listCapacitacionDTO, auditoriaJPA);
			
			for (CapacitacionDTO capacitacionModDTO : listCapacitacionDTO) {
				historialCapacitacion= new Capacitacion();
				if(capacitacionModDTO.getIdEstadoFicha()!=Long.parseLong(propSirenas.getString(ConstanteEJB.ID_ESTADO_PENDIENTE)))
				{
					if(capacitacionModDTO.getIdModificado()!=Long.parseLong(propSirenas.getString(ConstanteEJB.VALORCERO)))
					{
						historialCapacitacion=capacitacionDAOLocal.obtenerCapacitacion(capacitacionModDTO.getIdModificado());
						listCapacitacionHistorialJPA.add(historialCapacitacion);
					}
				}
			}
			listHistorialCapacitacionJPA=CapacitacionConvert.createListHistorialCapacitacionJPA(listCapacitacionHistorialJPA,auditoriaJPA);
			if(listHistorialCapacitacionJPA!=null)
			{
				/*** insertando los valores antes de rectificar**/
				for (HistorialCapacitacion histoCapacitacion : listHistorialCapacitacionJPA) {					
					capacitacionBoolean=capacitacionDAOLocal.insertarHistorialCapacitacion(histoCapacitacion);
					/**Registro de la Notificacion a bandeja*/
					NotificacionesDTO notificacionesDTO=new NotificacionesDTO();
					notificacionesDTO.setIdFicha(histoCapacitacion.getIdFicha());
					notificacionesDTO.setDescAsunto(propSirenas.getString(ConstanteEJB.NOTIF_RECTIFICACION));
					notificacionesDTO.setDescDetalle(propSirenas.getString(ConstanteEJB.NOTIF_DETALLE_RECTIFICACION)+" "+histoCapacitacion.NOMBRE_TABLA);
					notificacionesDTO.setIndLectura(false);
					
					registrarNotificacionService.registrarNotificacion(notificacionesDTO, auditoriaDTO);
					/**Implemetar metodo para sacar los correos de Comunicacione sd ela fichaArbitralDTO*/
					List<Comunicaciones> correos= comunicacionesDAOLocal.consultarListaComunicacion(idPersona, Long.parseLong(propSirenas.getString(ConstanteEJB.ID_CORREOELECTRONICO)), Long.parseLong(propSirenas.getString(ConstanteEJB.ID_CORREOELECTRONICODOS)));
					String toEmail="";
					if(correos!=null)
					{
						for (Comunicaciones comunicaciones : correos) {
							toEmail+=comunicaciones.getDescripcionDetalle()+ "  ";
						}
					}
					//String toEmail="jcayulla@outlook.com";
					/**Registro de la Notificacion a Correo Electronico*/
					registrarNotificacionService.enviarCorreoNotificacion(toEmail, propSirenas.getString(ConstanteEJB.NOTIF_RECTIFICACION), propSirenas.getString(ConstanteEJB.NOTIF_DETALLE_GRAL));
				}
			}
			for (Capacitacion capacitacion : listCapacitacionJPA) {
				capacitacion=capacitacionDAOLocal.insertar(capacitacion);				
			}
			listCapacitacionDTO=CapacitacionConvert.createListCapacitacionDTO(listCapacitacionJPA);

		} catch (ModeloException e) {
			throw new Exception(e.getMessage(),e);
		} catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB),e);
		}
		return listCapacitacionDTO;
	}
	
	
	@Override
	public	List<DocenciaDTO> guardarDocencia(List<DocenciaDTO> listDocenciaDTO,AuditoriaDTO auditoriaDTO,Long idPersona)
			throws Exception {
		List<Docencia>	listDocenciaJPA=null;
		List<Docencia>	listdocenciaJPA=null;
			Docencia	docenciaJPA=null;
		List<Docencia>	listHistorialdocenciaJPA=null;
		List<HistorialDocencia>	listHistorialJPA=null;
		Boolean bool= false;
		Auditoria auditoriaJPA=null;
		
		try{
			auditoriaJPA=AuditoriaConvert.createJPA(auditoriaDTO);
			/*** Obteniendo la lista de los  registro de Docencias rectificadas**/
			/** Consultando e insertando en la tabla Historial cuando es modificado y  el estado de la Ficha sea diferente de Estado Pendiente ***/
			listHistorialdocenciaJPA= new ArrayList<Docencia>();
			for (DocenciaDTO docenciaDTO : listDocenciaDTO) {
				docenciaJPA= new Docencia();
				if(docenciaDTO.getIdEstadoFicha()!=Long.parseLong(propSirenas.getString(ConstanteEJB.ID_ESTADO_PENDIENTE)))
				{
					if(docenciaDTO.getIdModificado()!=Long.parseLong(propSirenas.getString(ConstanteEJB.VALORCERO)))
					{
						docenciaJPA=docenciaDAOLocal.consultaDocencia(docenciaDTO.getIdModificado());
					listHistorialdocenciaJPA.add(docenciaJPA);				
					}
				}
			}
			
			listHistorialJPA=DocenciaConvert.createListHistorialDocenciaJPA(listHistorialdocenciaJPA,auditoriaJPA);
			if(listHistorialJPA!=null)
			{
				for (HistorialDocencia historialDocencia : listHistorialJPA) {				
					bool=docenciaDAOLocal.insertHistorialDocencia(historialDocencia);
					/**Registro de la Notificacion a bandeja*/
					NotificacionesDTO notificacionesDTO=new NotificacionesDTO();
					notificacionesDTO.setIdFicha(historialDocencia.getIdFicha());
					notificacionesDTO.setDescAsunto(propSirenas.getString(ConstanteEJB.NOTIF_RECTIFICACION));
					notificacionesDTO.setDescDetalle(propSirenas.getString(ConstanteEJB.NOTIF_DETALLE_RECTIFICACION)+" "+historialDocencia.NOMBRE_TABLA);
					notificacionesDTO.setIndLectura(false);
					
					registrarNotificacionService.registrarNotificacion(notificacionesDTO, auditoriaDTO);
					/**Implemetar metodo para sacar los correos de Comunicacione sd ela fichaArbitralDTO*/
					List<Comunicaciones> correos= comunicacionesDAOLocal.consultarListaComunicacion(idPersona, Long.parseLong(propSirenas.getString(ConstanteEJB.ID_CORREOELECTRONICO)), Long.parseLong(propSirenas.getString(ConstanteEJB.ID_CORREOELECTRONICODOS)));
					String toEmail="";
					if(correos!=null)
					{
						for (Comunicaciones comunicaciones : correos) {
							toEmail+=comunicaciones.getDescripcionDetalle()+ "  ";
						}
					}
					//String toEmail="jcayulla@outlook.com";
					/**Registro de la Notificacion a Correo Electronico*/
					registrarNotificacionService.enviarCorreoNotificacion(toEmail, propSirenas.getString(ConstanteEJB.NOTIF_RECTIFICACION), propSirenas.getString(ConstanteEJB.NOTIF_DETALLE_GRAL));
				}
			}
			/**  	FIN 			**/
			
			/* Insertar Solicitud */
			listDocenciaJPA= DocenciaConvert.createListJPA(listDocenciaDTO,auditoriaJPA);
			listDocenciaJPA= docenciaDAOLocal.insertList(listDocenciaJPA);
			/* OBTENER ESTRUCTURA DE LO GUARDADO */
			listDocenciaDTO= DocenciaConvert.createListDTO(listDocenciaJPA);

		} catch (ModeloException e) {
			throw new Exception(e.getMessage(),e);
		} catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB),e);
		}
		return listDocenciaDTO;
	}


	@Override
	public List<TrayectoriaArbitralDTO> guardarTrayectoria(List<TrayectoriaArbitralDTO> TrayectoriaDTO,AuditoriaDTO auditoriaDTO,Long idPersona) throws Exception {
		List<TrayectoriaArbitral> trayectoriaArbitralJPA=null;
		TrayectoriaArbitral trayectoriaArbitralConsul=null;
		List<TrayectoriaArbitral> trayectoriaArbitralAlHistorialJPA=null;
		List<HistorialTrayectoriaArbitral> listHistorialTrayectoriaArbitralJPA=null;
		Boolean confirmacion=false;
		Auditoria auditoriaJPA=null;
		try {
			auditoriaJPA=AuditoriaConvert.createJPA(auditoriaDTO);
			trayectoriaArbitralAlHistorialJPA= new ArrayList<TrayectoriaArbitral>();
			/*** Obteniendo la lista de los  registro de Trayectorias  rectificadas para insert a sus tablas historiales**/
			/** Consultando e insertando en la tabla Historial cuando es modificado y  el estado de la Ficha sea diferente de Estado Pendiente ***/
			
			for (TrayectoriaArbitralDTO trayectoriaArbitralDTO : TrayectoriaDTO) {
				trayectoriaArbitralConsul= new TrayectoriaArbitral();
				if(trayectoriaArbitralDTO.getIdEstadoFicha()!=Long.parseLong(propSirenas.getString(ConstanteEJB.ID_ESTADO_PENDIENTE)))
				{
					if(trayectoriaArbitralDTO.getIdModificado()!=Long.parseLong(propSirenas.getString(ConstanteEJB.VALORCERO)))
					{
						trayectoriaArbitralConsul=trayArbitralDAOLocal.consultarTrayectoriaArbitral(trayectoriaArbitralDTO.getIdModificado());
						trayectoriaArbitralAlHistorialJPA.add(trayectoriaArbitralConsul);
					}
				}
			}
			listHistorialTrayectoriaArbitralJPA=TrayectoriaArbitralConvert.createListHistorialTrayectoriaArbitralJPA(trayectoriaArbitralAlHistorialJPA,auditoriaJPA);
			if(listHistorialTrayectoriaArbitralJPA!=null)
				{
					for (HistorialTrayectoriaArbitral historialTrayectoriaArbitralJPA : listHistorialTrayectoriaArbitralJPA) {						
						confirmacion=trayArbitralDAOLocal.insertarHistorialTrayectoriaArbitral(historialTrayectoriaArbitralJPA);
						
						/**Registro de la Notificacion a bandeja*/
						NotificacionesDTO notificacionesDTO=new NotificacionesDTO();
						notificacionesDTO.setIdFicha(historialTrayectoriaArbitralJPA.getIdFicha());
						notificacionesDTO.setDescAsunto(propSirenas.getString(ConstanteEJB.NOTIF_RECTIFICACION));
						notificacionesDTO.setDescDetalle(propSirenas.getString(ConstanteEJB.NOTIF_DETALLE_RECTIFICACION)+" "+historialTrayectoriaArbitralJPA.NOMBRE_TABLA);
						notificacionesDTO.setIndLectura(false);
						
						registrarNotificacionService.registrarNotificacion(notificacionesDTO, auditoriaDTO);
						/**Implemetar metodo para sacar los correos de Comunicacione sd ela fichaArbitralDTO*/
						List<Comunicaciones> correos= comunicacionesDAOLocal.consultarListaComunicacion(idPersona, Long.parseLong(propSirenas.getString(ConstanteEJB.ID_CORREOELECTRONICO)), Long.parseLong(propSirenas.getString(ConstanteEJB.ID_CORREOELECTRONICODOS)));
						String toEmail="";
						if(correos!=null)
						{
							for (Comunicaciones comunicaciones : correos) {
								toEmail+=comunicaciones.getDescripcionDetalle()+ "  ";
							}
						}
						//String toEmail="jcayulla@outlook.com";
						/**Registro de la Notificacion a Correo Electronico*/
						registrarNotificacionService.enviarCorreoNotificacion(toEmail, propSirenas.getString(ConstanteEJB.NOTIF_RECTIFICACION), propSirenas.getString(ConstanteEJB.NOTIF_DETALLE_GRAL));
						
					}
				}	
			/**  	FIN 			**/
			
			
			trayectoriaArbitralJPA=TrayectoriaArbitralConvert.createListJPA(TrayectoriaDTO, auditoriaJPA);
			trayectoriaArbitralJPA=insertListTrayecotoria(trayectoriaArbitralJPA);
			
			TrayectoriaDTO=TrayectoriaArbitralConvert.createListDTO(trayectoriaArbitralJPA);

		} catch (ModeloException e) {
			throw new Exception(e.getMessage(),e);
		} catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB),e);
		}
		return TrayectoriaDTO;
	}


	@Override
	public List<TrayectoriaArbitral> insertListTrayecotoria( List<TrayectoriaArbitral> listTrayectoriaArbitral) throws Exception {
		List<TrayectoriaArbitral> listTrayectoriaArbitralJPA;
		try{

			listTrayectoriaArbitralJPA = new ArrayList<TrayectoriaArbitral>();
			for (TrayectoriaArbitral obj : listTrayectoriaArbitral) {
				
				listTrayectoriaArbitralJPA.add(trayArbitralDAOLocal.insertarTrayectoria(obj));
	
			}
		} catch (ModeloException e) {
			throw new Exception(e.getMessage(),e);
		} catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB),e);
		}
		return listTrayectoriaArbitralJPA;
	} 
	
	
	@Override
	public List<ExperienciaLaboralDTO> guardarExpLaboral(List<ExperienciaLaboralDTO> expLaboralDTO, AuditoriaDTO auditoriaDTO,Long idPersona)
			throws Exception {
		List<ExperienciaLaboral> experienciaLaboralJPA=null;
		List<ExperienciaLaboral> listExperienciaLaboralAlHitorialJPA=null;
		List<HistorialExperienciaLaboral> listHistorialExperienciaLaboralJPA=null;
		ExperienciaLaboral experienciaLaboralConsul=null;
		Boolean confirmacion=false;
		Auditoria auditoriaJPA=null;
		try {
			
			auditoriaJPA=AuditoriaConvert.createJPA(auditoriaDTO);
			/*** Obteniendo la lista de los  registro de Trayectorias  rectificadas para insert a sus tablas historiales**/
			/** Consultando e insertando en la tabla Historial cuando es modificado y  el estado de la Ficha sea diferente de Estado Pendiente ***/
			
			listExperienciaLaboralAlHitorialJPA= new ArrayList<ExperienciaLaboral>();
			for (ExperienciaLaboralDTO experienciaLaboralDTO : expLaboralDTO) {
				experienciaLaboralConsul= new ExperienciaLaboral();
				if(experienciaLaboralDTO.getIdEstadoFicha()!=Long.parseLong(propSirenas.getString(ConstanteEJB.ID_ESTADO_PENDIENTE)))
				{
					if(experienciaLaboralDTO.getIdModificado()!=Long.parseLong(propSirenas.getString(ConstanteEJB.VALORCERO)))
					{
						experienciaLaboralConsul=expLaboralDAOLocal.consultarExperienciaLaboral(experienciaLaboralDTO.getIdModificado());
						listExperienciaLaboralAlHitorialJPA.add(experienciaLaboralConsul);
					}
				}
			}
			listHistorialExperienciaLaboralJPA=ExperienciaLaboralConvert.createListHistorialExperienciaLaboralJPA(listExperienciaLaboralAlHitorialJPA, auditoriaJPA);
			if(listHistorialExperienciaLaboralJPA!=null)
			{
				for (HistorialExperienciaLaboral historialExperienciaLaboral : listHistorialExperienciaLaboralJPA) {
					confirmacion=expLaboralDAOLocal.insertarHistorialExperienciaLaboral(historialExperienciaLaboral);
					/**Registro de la Notificacion a bandeja*/
					NotificacionesDTO notificacionesDTO=new NotificacionesDTO();
					notificacionesDTO.setIdFicha(historialExperienciaLaboral.getIdFicha());
					notificacionesDTO.setDescAsunto(propSirenas.getString(ConstanteEJB.NOTIF_RECTIFICACION));
					notificacionesDTO.setDescDetalle(propSirenas.getString(ConstanteEJB.NOTIF_DETALLE_RECTIFICACION)+" "+historialExperienciaLaboral.NOMBRE_TABLA);
					notificacionesDTO.setIndLectura(false);
					
					registrarNotificacionService.registrarNotificacion(notificacionesDTO, auditoriaDTO);
					/**Implemetar metodo para sacar los correos de Comunicacione sd ela fichaArbitralDTO*/
					 
					String correo1= propSirenas.getString(ConstanteEJB.ID_CORREOELECTRONICO);
					String correo2= propSirenas.getString(ConstanteEJB.ID_CORREOELECTRONICODOS);
					List<Comunicaciones> correos= comunicacionesDAOLocal.consultarListaComunicacion(idPersona, Long.parseLong(propSirenas.getString(ConstanteEJB.ID_CORREOELECTRONICO)), Long.parseLong(propSirenas.getString(ConstanteEJB.ID_CORREOELECTRONICODOS)));
					String toEmail="";
					if(correos!=null)
					{
						for (Comunicaciones comunicaciones : correos) {
							toEmail+=comunicaciones.getDescripcionDetalle()+ "  ";
						}
					}
					//String toEmail="jcayulla@outlook.com";
					/**Registro de la Notificacion a Correo Electronico*/
					registrarNotificacionService.enviarCorreoNotificacion(toEmail, propSirenas.getString(ConstanteEJB.NOTIF_RECTIFICACION), propSirenas.getString(ConstanteEJB.NOTIF_DETALLE_GRAL));
					
				}
			}
				
			/**  	FIN 			**/	
			
			
			
			experienciaLaboralJPA=ExperienciaLaboralConvert.createListJPA(expLaboralDTO, auditoriaJPA);			
			experienciaLaboralJPA=expLaboralDAOLocal.insertList(experienciaLaboralJPA);
			expLaboralDTO=ExperienciaLaboralConvert.createListDTO(experienciaLaboralJPA);

		} catch (ModeloException e) {
			throw new Exception(e.getMessage(),e);
		} catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB),e);
		}
		
		
		return expLaboralDTO;
	}
	
	/**Todos estos seran movidos a ObtenerDatosComunes*/
	@Override
	public	List<ParametrosDTO> obtenerListaParametros()
			throws Exception {
		List<ParametrosDTO> listaParametros= null;
	
		try{			
			listaParametros=parametrosDAOLocal.listarParametros();

		} catch (ModeloException e) {
			throw new Exception(e.getMessage(),e);
		} catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB),e);
		}
		return listaParametros;
	}
	
	@Override
	public	List<AreaProfesionDTO> obtenerListaAreaProfesion()
			throws Exception {
		List<AreaProfesionDTO> listaAreaProfesion= null;
	
		try{			
			listaAreaProfesion=areaProfesionDAOLocal.listarAreaProfesion();

		} catch (ModeloException e) {
			throw new Exception(e.getMessage(),e);
		} catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB),e);
		}
		return listaAreaProfesion;
	}
	
	@Override
	public	List<CentroEstudiosDTO> obtenerListaCentroEstudios()
			throws Exception {
		List<CentroEstudiosDTO> listaCentroEstudios= null;
	
		try{			
			listaCentroEstudios=centroEstudiosDAOLocal.listarCentroEstudios();

		} catch (ModeloException e) {
			throw new Exception(e.getMessage(),e);
		} catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB),e);
		}
		return listaCentroEstudios;
	}
	
	@Override
	public	List<PaisDTO> obtenerListaPais()
			throws Exception {
		List<PaisDTO> listaPais= null;
	
		try{			
			listaPais=paisDAOLocal.listarPais();

		} catch (ModeloException e) {
			throw new Exception(e.getMessage(),e);
		} catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB),e);
		}
		return listaPais;
	}
	
	
	@Override
	public	List<MateriaControversiaDTO> obtenerListaMateriaControversia()
			throws Exception {
		List<MateriaControversiaDTO> listaMateriaControversia= null;
	
		try{			
			listaMateriaControversia=materiaControversiaDAOLocal.listarMateriaControversia();

		} catch (ModeloException e) {
			throw new Exception(e.getMessage(),e);
		} catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB),e);
		}
		return listaMateriaControversia;
	}

	@Override
	public	List<AcreditacionDTO> obtenerListaAcreditaciones(Long idFicha)
			throws Exception {
		List<AcreditacionDTO> listaAcreditacion= null;
	
		try{			
			listaAcreditacion=acreditacionDAOLocal.listarAcreditacion(idFicha);

		} catch (ModeloException e) {
			throw new Exception(e.getMessage(),e);
		} catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB),e);
		}
		return listaAcreditacion;
	}

	@Override
	public	AcreditacionDTO guardarAcreditacion(AcreditacionDTO acreditacionDTO,AuditoriaDTO auditoriaDTO)
			throws Exception {
		Acreditacion	acreditacionJPA=null;
		Auditoria auditoriaJPA=null;
		
		try{
			auditoriaJPA=AuditoriaConvert.createJPA(auditoriaDTO);
			/* Insertar Acreditacion */
			acreditacionJPA= AcreditacionConvert.createAcreditacionJPA(acreditacionDTO,auditoriaJPA);
			acreditacionJPA= acreditacionDAOLocal.insertAcreditacion(acreditacionJPA);
			/* OBTENER ESTRUCTURA DE LO GUARDADO */
			acreditacionDTO= AcreditacionConvert.createAcreditacionDTO(acreditacionJPA);

		} catch (ModeloException e) {
			throw new Exception(e.getMessage(),e);
		} catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB),e);
		}
		return acreditacionDTO;
	}
	
	@Override
	public	List<FormacionAcademicaDTO> consultarHistorialFormacionAcademica(Long idFormacionAcademica)
			throws Exception {
		List<FormacionAcademicaDTO> listaFormacionAcademicaDTO= null;
		List<HistorialFormacionAcademica> listaHistorialFormacionAcademicaJPA= null;
		try{			
			
			
			listaHistorialFormacionAcademicaJPA=formacionAcademicaDAOLocal.consultarHistorialFormacionAcademica(idFormacionAcademica);
			listaFormacionAcademicaDTO=FormacionAcademicaConvert.createListHistorialFormAcademicaDTO(listaHistorialFormacionAcademicaJPA);

		} catch (ModeloException e) {
			throw new Exception(e.getMessage(),e);
		} catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB),e);
		}
		return listaFormacionAcademicaDTO;
	}
	
	@Override
	public	List<EspecialidadAcademicaDTO> consultarHistorialEspecialidadAcademica(Long idEspecialidadAcademica)
			throws Exception {
		List<EspecialidadAcademicaDTO> listaEspecialidadAcademicaDTO= null;
		List<HistorialEspecialidadAcademica> listaHistorialEspecialidadAcademicaJPA= null;
		try{			
			
			
			listaHistorialEspecialidadAcademicaJPA=especialidadAcademicaDAOLocal.consultarHistorialEspecialidadAcademica(idEspecialidadAcademica);
			listaEspecialidadAcademicaDTO=EspecialidadAcademicaConvert.createListHistorialEspecialidadAcademicaDTO(listaHistorialEspecialidadAcademicaJPA);

		} catch (ModeloException e) {
			throw new Exception(e.getMessage(),e);
		} catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB),e);
		}
		return listaEspecialidadAcademicaDTO;
	}
	
	@Override
	public	List<CapacitacionDTO> consultarHistorialCapacitacion(Long idCapacitacion)
			throws Exception {
		List<CapacitacionDTO> listaCapacitacionDTO= null;
		List<HistorialCapacitacion> listaHistorialCapacitacionJPA= null;
		try{			
			
			
			listaHistorialCapacitacionJPA=capacitacionDAOLocal.consultarHistorialCapacitacion(idCapacitacion);
			listaCapacitacionDTO=CapacitacionConvert.createListHistorialCapacitacionDTO(listaHistorialCapacitacionJPA);

		} catch (ModeloException e) {
			throw new Exception(e.getMessage(),e);
		} catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB),e);
		}
		return listaCapacitacionDTO;
	}
	
	@Override
	public	List<DocenciaDTO> consultarHistorialDocencia(Long idDocencia)
			throws Exception {
		List<DocenciaDTO> listaDocenciaDTO= null;
		List<HistorialDocencia> listaHistorialDocenciaJPA= null;
		try{			
			
			
			listaHistorialDocenciaJPA=docenciaDAOLocal.consultarHistorialDocencia(idDocencia);
			listaDocenciaDTO=DocenciaConvert.createListHistorialDocenciaDTO(listaHistorialDocenciaJPA);

		} catch (ModeloException e) {
			throw new Exception(e.getMessage(),e);
		} catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB),e);
		}
		return listaDocenciaDTO;
	}
	
	@Override
	public	List<TrayectoriaArbitralDTO> consultarHistorialTrayectoriaArbitral(Long idTrayectoriaArbitral)
			throws Exception {
		List<TrayectoriaArbitralDTO> listaTrayectoriaArbitralDTO= null;
		List<HistorialTrayectoriaArbitral> listaHistorialTrayectoriaArbitralJPA= null;
		try{			
			
			
			listaHistorialTrayectoriaArbitralJPA=trayArbitralDAOLocal.consultarHistorialTrayectoriaArbitral(idTrayectoriaArbitral);
			listaTrayectoriaArbitralDTO=TrayectoriaArbitralConvert.createListHistorialTrayectoriaArbitralDTO(listaHistorialTrayectoriaArbitralJPA);

		} catch (ModeloException e) {
			throw new Exception(e.getMessage(),e);
		} catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB),e);
		}
		return listaTrayectoriaArbitralDTO;
	}
	
	
	@Override
	public	List<ExperienciaLaboralDTO> consultarHistorialExperienciaLaboral(Long idExperienciaLaboral)
			throws Exception {
		List<ExperienciaLaboralDTO> listaExperienciaLaboralDTO= null;
		List<HistorialExperienciaLaboral> listaHistorialExperienciaLaboralJPA= null;
		try{			
			
			
			listaHistorialExperienciaLaboralJPA=expLaboralDAOLocal.consultarHistorialExperienciaLaboral(idExperienciaLaboral);
			listaExperienciaLaboralDTO=ExperienciaLaboralConvert.createListHistorialExperienciaLaboralDTO(listaHistorialExperienciaLaboralJPA);

		} catch (ModeloException e) {
			throw new Exception(e.getMessage(),e);
		} catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB),e);
		}
		return listaExperienciaLaboralDTO;
	}
	
	
	
}
